import java.lang.Math;

import static java.lang.Math.*;
import static java.lang.Math.sqrt;

public class Main {
    //计算a点到b点的距离。
    //判断a点与b圆心的距离是否小于b的半径，若是，则a点在b圆形区域内，直接返回a点坐标。
    //若a点不在b圆形区域内，则计算a点到b圆心的方向向量。
    //将方向向量单位化，并乘以b的半径，得到从b圆心指向直线交点的向量。
    //将得到的向量加上b圆心的坐标，即可得到直线与b圆形区域的交点坐标。
    public static void main(String[] args) {
        double[] a = {100.0, 28.0};
        double[] b = {101.0, 29.0};
        double radius = 1000/111000.0;

        // 计算a点到b点的距离
        double distance = distance(a[0], a[1], b[0], b[1]);


        // 判断a点是否在b圆形区域内
        if (distance <= radius) {
            System.out.println("a点在b圆形区域内，直接返回a点坐标：" + a[0] + ", " + a[1]);
            return;
        }

        // 计算a点到b圆心的方向向量
        double[] directionVector = new double[]{b[0] - a[0], b[1] - a[1]};

        // 将方向向量单位化
        double length = Math.sqrt(directionVector[0] * directionVector[0] + directionVector[1] * directionVector[1]);
        double[] normalizedVector = new double[]{directionVector[0] / length, directionVector[1] / length};

        // 将单位化的向量乘以b的半径
        double[] intersectionPoint = new double[]{a[0] + normalizedVector[0] * radius, a[1] + normalizedVector[1] * radius};

        System.out.println("直线与b圆形区域的交点坐标：" + intersectionPoint[0] + ", " + intersectionPoint[1]);


    }

    // 计算两点之间的距离
    public static double distance(double lat1, double lon1, double lat2, double lon2) {
        // 地球半径，单位：千米
        double R = 6371.0;

        // 将经纬度转换为弧度
        double latDistance = toRadians(lat2 - lat1);
        double lonDistance = toRadians(lon2 - lon1);
        double a = sin(latDistance / 2) * sin(latDistance / 2)
                + cos(toRadians(lat1)) * cos(toRadians(lat2))
                * sin(lonDistance / 2) * sin(lonDistance / 2);
        double c = 2 * atan2(sqrt(a), sqrt(1 - a));
        double distance = R * c;

        return distance;
    }
}
